package Sort;

import Sort.sortUtil.MyUtils;

import static Sort.BubbleSort.test1;

/**
 * @program: jvm
 * @description   冒泡排序
 * @author: tkk fendoukaoziji
 * @create: 2019-02-01 10:20
 **/
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {9,1,5,8,3,7,4,6,2};

        test1(arr);

        test2(arr);

    }

    /**
     * 容易版本
     * @param arr
     */
    public static  void test1(int[] arr){
        int i,j;
        int count=0;
        for ( i = 0; i < arr.length-1; i++) {
            count++;
            for (j=0;j<arr.length-1-i;j++){//从后往前  如果前者大于后者
                if(arr[j]>arr[j+1]){
                    MyUtils.swap(arr,j,j+1);
                }

            }
            System.out.println("第"+i+"趟排序后数组");
            for (int num:arr){
                System.out.print(num +" ");
            }
        }
        System.out.println("最终排序后数组");
        for (int num:arr){
            System.out.print(num +" ");
        }
    }

    /**
     * 改进版本  如果经过比较后后续没有交换说明已经有序  不需要进行后续比较
     *
     */

    public static void test2(int[] arr){
        int i,j;
        int count=0;
        boolean flag=true;
        System.out.println("排序前的数组");
        for (int num:arr){
            System.out.print(num +" ");
        }
        for ( i = 0; i < arr.length-1&& flag; i++) {
            count++;
            flag=false;//如果为false说明后续比较没有交换顺序 也就是已经有序  这样的话 不需要进行后续判断了
            for (j=0;j<arr.length-1-i ;j++){
                if(arr[j]>arr[j+1]){
                    MyUtils.swap(arr,j,j+1);
                    flag=true;//代表这一轮有交换
                }
            }
        }
        System.out.println(flag);
        System.out.println("执行了"+count+"次");
        System.out.println("最终排序后数组");
        for (int num:arr){
            System.out.print(num +" ");
        }
    }
}
